/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package vista;

import modelo.Mercaderia;
import modelo.MovimientoStock;
import modelo.Producto;
import modelo.TipoMovimiento;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;
import negocio.ExcepcionValidacion;
import negocio.ServiciosNegocio;

/**
 *
 * @author Aguero
 */
public class ControladorMercaderias implements ControladorProductos{

    private Mercaderias ventanaMercaderias;
    private AMMercaderia amMercaderia;
    private ProductoProveedores productoProveedores;
    private ProductoMovimientos productoMovimientos;
    private ServiciosNegocio servicios;

    public ControladorMercaderias(ServiciosNegocio servicios) {

        this.servicios = servicios;

    }

    public void crearVentanaLista( java.awt.Frame padre, boolean modal){

        ventanaMercaderias=new Mercaderias(padre,modal);

    }

    public void crearVentanaA( javax.swing.JDialog padre, boolean modal){

        amMercaderia=new AMMercaderia(padre,modal);
        amMercaderia.setControlador(this);

    }

    public void crearVentanaM(javax.swing.JDialog padre, ArrayList<Object> datos, boolean modal){

        amMercaderia=new AMMercaderia(padre, datos, modal);
        amMercaderia.setControlador(this);

    }

    public void crearVentanaProv(javax.swing.JDialog padre, Producto producto, boolean modal){

        productoProveedores = new ProductoProveedores(padre, (Mercaderia) producto, modal);
        
    }

    public void crearVentanaMov(javax.swing.JDialog padre, Producto producto, boolean modal){

        productoMovimientos = new ProductoMovimientos(padre, (Mercaderia) producto, modal);

    }

    public void nuevo(ArrayList<Object> datos) {
        try {
            servicios.alta(datos);
        } catch (ExcepcionValidacion ex) {
            Logger.getLogger(ControladorMercaderias.class.getName()).log(Level.SEVERE, null, ex);
        }

    }


    public void modificar(ArrayList<Object> datos){
        try {
            servicios.modificacion(datos);
        } catch (ExcepcionValidacion ex) {
            Logger.getLogger(ControladorMercaderias.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public void borrar(Long id){
        try {
            servicios.eliminar(id);
        } catch (ExcepcionValidacion ex) {
            Logger.getLogger(ControladorMercaderias.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

   public void actualizarTabla(javax.swing.JDialog ventana) {
        ventanaMercaderias=(Mercaderias)ventana;
        List<Mercaderia> mercaderias = (List<Mercaderia>) servicios.listar();
        DefaultTableModel modeloTabla = ventanaMercaderias.getModeloTabla();
        modeloTabla.setRowCount(0);
        for (Mercaderia mercaderia : mercaderias) {
            List<MovimientoStock> movimientos = (List<MovimientoStock>) mercaderia.getMovimientos();
            int ingreso=0,egreso=0;
            for(MovimientoStock movimiento : movimientos){
                if(movimiento.getTipo().compareTo(TipoMovimiento.EGRESO)==0)
                    egreso=egreso+movimiento.getCantidad();
                if(movimiento.getTipo().compareTo(TipoMovimiento.INGRESO)==0)
                    ingreso=ingreso+movimiento.getCantidad();

            }
            int total=ingreso-egreso;
            Date date=mercaderia.getFechaVencimiento();
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            String fecha = dateFormat.format(date);
            Object[] fila = {mercaderia.getId(),mercaderia.getNombre(), mercaderia.getMarca().getNombre(), mercaderia.getCategoria().getNombre(), fecha,total,mercaderia.isVence(),mercaderia.getPrecioVenta(), mercaderia.getCostoCompra(), mercaderia.getCostoAlmacenamiento()};
            modeloTabla.addRow(fila);
        }
    }
   
    public Mercaderia traerPorID(Long id) {
        return (Mercaderia) servicios.buscar(id);
    }
}
